package com.enjoyor.soa.traffic.api.ubms.service.dubbo;

import com.enjoyor.soa.traffic.api.ubms.dto.PersonInfoDto;
import com.enjoyor.soa.traffic.util.pojo.Page;
import com.enjoyor.soa.traffic.util.pojo.ResultPojo;

/**
 * 维护警员信息的Dubbo服务
 * @author yuankun
 * @version V1.0
 */
public interface DubboPersonInfoService {

	/**
	 * 返回所有警员信息
	 * @return ResultPojo 所有警员信息
	 */
	public ResultPojo getPersonInfo();
	
	/**
	 * 分页返回警员信息
	 * @param page 分页对象
	 * @return ResultPojo 包含警员信息的分页对象
	 */
	@SuppressWarnings("rawtypes")
	public ResultPojo getPagePersonInfo(Page page);
	
	/**
	 * 分页返回警员信息
	 * @param personId 警员编码
	 * @param personName 警员名称
	 * @param deptId 部门编号(填写后只返回该部门的警员信息)
	 * @param parentId 上级部门编码
	 * @param orderSeq 排列方式
	 * @return ResultPojo 所有警员信息
	 */
	@SuppressWarnings("rawtypes")
	public ResultPojo getPagePersonInfo(String personId,String personName,String deptId,String parentId,String orderSeq,Page page);
	/**
	 * 分页返回警员信息
	 * @param personName 警员名称
	 * @param page 分页对象
	 * @return ResultPojo 包含警员信息的分页对象
	 */
	@SuppressWarnings("rawtypes")
	public ResultPojo getPagePersonInfoByPersonName(String personName,Page page);
	
	/**
	 * 分页返回指定部门的所有下级部门警员信息
	 * @param parentDeptId 指定部门编码
	 * @param page 分页对象
	 * @return ResultPojo 包含警员信息的分页对象
	 */
	@SuppressWarnings("rawtypes")
	public ResultPojo getPagePersonInfoByParentDept(String parentDeptId, Page page);
	
	/**
	 * 分页返回指定部门的本部门以及所有下级部门警员信息
	 * @param parentDeptId 指定部门编码
	 * @param personId 警员编号
	 * @param personName 警员姓名
	 * @param personKey 警员关键字（警员编号或者警员名称）
	 * @param page 分页对象
	 * @return ResultPojo 包含警员信息的分页对象
	 */
	@SuppressWarnings("rawtypes")
	public ResultPojo getPagePersonInfoByParentDeptId(String parentDeptId, String personId, String personName, 
			String personKey, Page page);
	
	/**
	 * 返回指定编码的警员信息
	 * @param personId 警员编码
	 * @return ResultPojo 警员信息
	 */
	public ResultPojo getPersonInfoById(String personId);
	
	/**
	 * 返回指定姓名的警员信息
	 * @param personName 警员姓名
	 * @return ResultPojo 警员信息
	 */
	public ResultPojo getPersonInfoByName(String personName);
	
	/**
	 * 返回指定部门的警员信息
	 * @param deptId 部门编码
	 * @return ResultPojo 警员信息
	 */
	public ResultPojo getPersonInfoByDept(String deptId);
	
	/**
	 * 返回指定部门的所有下级部门警员信息
	 * @param parentDeptId 上级部门编码
	 * @return ResultPojo 警员信息
	 */
	public ResultPojo getPersonInfoByParentDept(String parentDeptId);
	
	/**
	 * 返回指定部门的本部门以及所有下级部门警员信息
	 * @param parentId 上级部门编码
	 * @param personId 警员编号
	 * @param personName 警员姓名
	 * @param personKey 警员关键字（警员编号或者警员名称）
	 * @return ResultPojo 警员信息
	 */
	public ResultPojo getPersonInfoByParentId(String parentId, String personId, String personName, String personKey);
	
	/**
	 * 按警员姓名和所属部门匹配并返回警员信息
	 * @param personName 警员姓名
	 * @param deptId 所属部门编码
	 * @return ResultPojo 警员信息
	 */
	public ResultPojo getPersonInfoByNameDept(String personName, String deptId);
	
	/**
	 * 添加一条警员信息
	 * @param token 以逗号分隔的输入信息，如用户名等
	 * @param personInfoDto 警员信息
	 * @return ResultPojo 添加结果
	 */
	public ResultPojo addPersonInfo(String token, PersonInfoDto personInfoDto);
	
	/**
	 * 修改一条警员信息
	 * @param token 以逗号分隔的输入信息，如用户名等
	 * @param personInfoDto 警员信息
	 * @return ResultPojo 修改结果
	 */
	public ResultPojo editPersonInfo(String token, PersonInfoDto personInfoDto);
	
	/**
	 * 删除指定编码的警员信息
	 * @param token 以逗号分隔的输入信息，如用户名等
	 * @param personId 警员编码 
	 * @return ResultPojo 删除结果
	 */
	public ResultPojo removePersonInfo(String token, String personId);

	/**
	 * 返回所有警员信息
	 * @param personId 警员编码
	 * @param personName 警员名称
	 * @param deptId 部门编号
	 * @param deptName 部门名称
	 * @param orderSeq 排列方式
	 * @return ResultPojo 所有警员信息
	 */
	public ResultPojo getPersonInfo(String personId, String personName, String deptId, String deptName, String orderSeq);

	/**
	 * 人员相关下拉框使用
	 * @param personId
	 * @param personName
	 * @param deptId
	 * @return 返回警员姓名信息
	 */
	public ResultPojo getPersonName(String personId, String personName, String deptId);

	/**
	 * 返回警员信息分页信息
	 * @param personId 警员编码
	 * @param personName 警员名称
	 * @param deptId 部门编号
	 * @param parentId 上级部门编码
	 * @param orderSeq 排列方式
	 * @return ResultPojo 所有警员信息
	 */
	@SuppressWarnings("rawtypes")
	public ResultPojo getBootStrapPagePerson(String personId, String personName, String deptId, String parentId, String deptName,String orderSeq,Page page);

	@SuppressWarnings("rawtypes")
	public ResultPojo getPagePersonInfoByParentId(String personId, String personName, String deptId, String parentId,
			String orderSeq, Page page);
}
